#include<iostream>
#include<string>
#include<vector>
using namespace std;
//
//class Solution {
//public:
//    int myAtoi(string str) {
//        int flag = 1;
//        int i = 0;
//        for (; i < str.size(); i++) {
//            if (str[i] == ' ')continue;
//            else if ((str[i] == '-' || str[i] == '+')) {
//                if (str[i + 1] < '0' || str[i + 1]>'9')return 0;
//                if (str[i] == '-') flag = -1;
//                i++;
//                break;
//            }
//            else if (str[i] > '9' || str[i] < '0')return 0;
//            else break;
//        }
//        if (i == str.size())return 0;
//        int flag1 = 0;
//        long long digit = str[i++] - '0';
//        while (i < str.size() && (str[i] >= '0' && str[i] <= '9')) {
//            digit *= 10;
//            digit += str[i] - '0';
//            if (digit > 2147483648) {
//                flag1 = 1;
//                break;
//            }
//            ++i;
//        }
//        digit *= flag;
//        if (digit < -2147483648)digit = -2147483648;
//        else if (digit > 2147483647)digit = 2147483647;
//        return digit;
//    }
//};
//
//class Solution {
//public:
//    string addStrings(string num1, string num2) {
//        int end1 = num1.size() - 1;
//        int end2 = num2.size() - 1;
//        int x1 = 0;
//        int x2 = 0;
//        int x, ws = 0;
//        string str;
//        while (end1 >= 0 || end2 >= 0) {
//            x1 = end1 >= 0 ? num1[end1--] - '0' : 0;
//            x2 = end2 >= 0 ? num2[end2--] - '0' : 0;
//            x = x1 + x2 + ws;
//            ws = x / 10;
//            str += (x % 10 + '0');
//        }
//        if (ws == 1)str += '1';
//        reverse(str.begin(), str.end());
//        return str;
//    }
//};
//
//class Solution {
//public:
//    void reverseString(vector<char>& s) {
//        reverse(s.begin(), s.end());
//    }
//};
//
//class Solution {
//public:
//    int firstUniqChar(string s) {
//        int arr[26] = { 0 };
//        for (auto e : s) {
//            ++arr[e - 'a'];
//        }
//        for (int i = 0; i < s.size(); i++) {
//            if (arr[s[i] - 'a'] == 1)return i;
//        }
//        return -1;
//    }
//};


//class Solution {
//public:
//    bool judge_ch(char& e) {
//        if (e >= 'A' && e <= 'Z') {
//            e += 32;
//            return true;
//        }
//        else if (e >= 'a' && e <= 'z' || e >= '0' && e <= '9')return true;
//        return false;
//    }
//
//    bool isPalindrome(string s) {
//        int l = 0;
//        int r = s.size() - 1;
//        while (l < r) {
//            while (!judge_ch(s[l]) && l < r)l++;
//            while (!judge_ch(s[r]) && l < r)r--;
//            if (l < r && s[l] != s[r])return false;
//            l++; r--;
//        }
//        return true;
//    }
//};

class Solution {
public:
    string multiply(string num1, string num2) {
        int larr[205] = { 0 };
        int rarr[205] = { 0 };
        int size1 = num1.size();
        int size2 = num2.size();
        for (int i = 0; i < size1; i++)larr[i] = num1[size1 - i - 1] - '0';
        for (int i = 0; i < size2; i++)rarr[i] = num2[size2 - i - 1] - '0';
        int ans_arr[1005] = { 0 };
        for (int i = 0; i < size1; i++) {
            for (int j = 0; j < size2; j++) {
                ans_arr[i + j] += larr[i] * rarr[j];
            }
        }
        for (int i = 0; i < 1000; i++) {
            ans_arr[i + 1] += ans_arr[i] / 10;
            ans_arr[i] %= 10;
        }
        int rem = 1000;
        while (rem >= 0 && ans_arr[rem] == 0)rem--;
        // if(rem<0)return string("");
        string str;
        while (rem >= 0) {
            str += ans_arr[rem] + '0';
            --rem;
        }
        if (str.size() == 0)str += '0';
        return str;
    }
};

int main()
{
    Solution().multiply("9", "99");
    return 0;
}